/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import core.CreateConta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Jônatas
 */
public class CreateContaEmbratel implements CreateConta {

    public ContaTelefonica createConta(String[] fullFile) throws Exception {

        ContaTelefonica contaTelefonica = new ContaTelefonica();

        contaTelefonica.contaMensal = new ArrayList<EntradaAbstrata>();
        String anterior = "";
        String tipo = null;
        boolean aCobrar = false;

        for (String line : fullFile) {

            line = line.trim();

            if (line.length() == 0) {
                continue;
            }

            if (line.equals("Seq. 	Tel.Faturado 		Destino 	Tel.Destino 	"
                    + "Data 	Hora Início 	Duração 	Tarifa 	Valor(R$)    	ICMS")
                    || line.equals("Seq. 	Tel.Faturado 		Origem 	Tel.Origem 	"
                    + "Data 	Hora Início 	Duração 	Tarifa 	Valor(R$)    	ICMS")) {

                tipo = anterior;
                if (anterior.toLowerCase().contains("cobrar")) {
                    aCobrar = true;
                } else {
                    aCobrar = false;
                }

                int pos = anterior.indexOf("Data");

                if (pos > -1) {
                    tipo = tipo.substring(0, pos).trim();
                }

                continue;

            }


            Pattern patternFone = Pattern.compile("[0-9]{10}");
            Matcher matcherFone = patternFone.matcher(line);


            Pattern patternData = Pattern.compile("[0-9]{2}/[0-9]{2}/[0-9]{4}");
            Matcher matcherData = patternData.matcher(line);

            if (matcherFone.find() && matcherFone.find() && matcherData.find()) {
                contaTelefonica.contaMensal.add(QuebraStringEmbratel.quebraStringEmbratel(line, aCobrar, tipo));
            }

            anterior = line;

        }

        Collections.sort(contaTelefonica.contaMensal, new ComparatorEntradaAbstrataPorTelefone());

        contaTelefonica.contaResumida();

        return contaTelefonica;

    }
}
